#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

#include "epoll_server.h"

#define WORKER_THREAD 4


int main() {

    std::mutex mutex;
    std::unique_lock<std::mutex> lck(mutex);
    std::condition_variable cv;

    //第一种,多个线程不使用多路复用,accept同一个socket
    int fd = createSocket();
    for (int i = 0; i < WORKER_THREAD; ++i) {
        std::thread th(&Worker1, fd, i + 1);
        th.detach();
    }

    //第二种,多个线程使用epoll多路复用,accept同一个socket
//    int fd = createSocket();
//    for (int i = 0; i < WORKER_THREAD; ++i) {
//        std::thread th(&Worker2, fd, i + 1);
//        th.detach();
//    }

    //第三种,多个线程使用epoll多路复用,加互斥标记,accept同一个socket
//    int fd = createSocket();
//    for (int i = 0; i < WORKER_THREAD; ++i) {
//        std::thread th(&Worker2, fd, i + 1);
//        th.detach();
//    }

    //第四种,多个线程使用epoll多路复用,每个线程分别bind,listen 同一个端口, accept各自的socket
//    for (int i = 0; i < WORKER_THREAD; ++i) {
//        std::thread th(&Worker4, i + 1);
//        th.detach();
//    }

    cv.wait(lck);
    return 0;
}
